#第一题  map批量检测用户名，字母数字下划线，不能以数字开头，长度在6-18之间
username_list = ["nanfeng123_321","3248dhasuhd_487","dqweqdwfet652646_5235","e42_3","dsq130-===?dshu","beihai_3124you"]
#第一个对的 第二个数字开头例如 第三个长度超过18了 第四个长度小于6了 第五个有其他字符了 第六个对的
def func1(x):
    #判断是否有含其他字符、以数字开头和长度不合格的错误
    for i in x:
        error_list = [0,0,0]
        if i.isalnum() or i == "_":
            error_list[0] = 0
        else:
            error_list[0] = 1
            break
    if x[1].isdigit():
        error_list[1] = 1
    if len(x) >= 18 or len(x) <= 6:
        error_list[2] = 1

    if sum(error_list) > 0:
        return False
    else:
        return True

print("合法的用户名为:",list(filter(func1, username_list)))


#第二题  匿名函数+reduce实现1*2*3*...*n
from functools import reduce
n = input("请输入累乘的最后一位数n：")
print(reduce(lambda x,y:x*y ,range(1,int(n) + 1)))


#第三题  filter函数找出[1-100]能被3整除的数
print(list(filter(lambda x:x%3 == 0,range(1,101))))


#第四题  map函数求list[1-10]各项的平方
print(list(map(lambda x:x**2,range(1,11))))


#第五题  将列表[1,4,5,9]转换成"1459"的字符串
from functools import reduce
lst = [1,4,5,9]
map(lambda x:str(x),lst)
print(reduce(lambda x,y:x+y,map(lambda x:str(x),lst)))


"""
第六题  有以下列表：list = [7,-8,5,4,0,-2,-5]
实现 :
    正数在前负数在后
    正数从小到大
    负数从大到小
"""
list = [7,-8,5,4,0,-2,-5]
lst0 = sorted(list)

#a = 0 说明不存在0 反之存在0
a = 0
#lst1是负数 lst2是正数
for i in range(len(lst0)):
    if lst0[i] == 0 :
        lst1 = lst0[0:i]
        lst2 = lst0[i+1:len(lst0)]
        a = 1
        break
    elif lst0[i] > 0:
        lst1 = lst0[0:i]
        lst2 = lst0[i:len(lst0)]

lst1 = sorted(lst1,reverse = True)
#列表中没有0
if a == 0:
    print(lst2+lst1)
#列表中有0
else:
    print(lst2 + [0] + lst1)


#第七题  字符串排序 排序规则：小写<大写<奇数<偶数 S = "asdf234GDSdsf23" 原理：先比较元组的第一个值 False
from functools import reduce

S = "asdf234GDSdsf23"
upper_alpha = []
lower_alpha =[]
odd_num = []
complex_num = []

for i in S:
    if i.isalpha():
        if i.isupper():
            upper_alpha.append(i)
        elif i.islower():
            lower_alpha.append(i)
    elif i.isdigit():
        if int(i)%2 == 1:
            odd_num.append(i)
        if int(i)%2 == 0:
            complex_num.append(i)

upper_alpha = sorted(upper_alpha)
lower_alpha = sorted(lower_alpha)
odd_num = sorted(odd_num)
complex_num = sorted(complex_num)
all_lst = lower_alpha + upper_alpha + odd_num + complex_num
print(all_lst)

print(reduce(lambda x,y:x + y ,all_lst))
